using System;
using System.Collections.Generic;
using System.Reflection;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Data.OracleClient;

using Kenly.DBFramework.Reflection;

namespace Kenly.DBFramework.Gateway
{
    /// <summary>
    /// 
    /// </summary>
    internal class SqlParameterBuilder : ParameterBuilderBase
    {

        public override IDataParameter CreateColumnParameter(ColumnAttribute columnAttribute, string parameterName, object parameterValue)
        {
            parameterValue=AdaptParameterValue(parameterValue);
            bool isNullable = true;
            SqlParameter tempParameter = (parameterValue is DBNull) ?
                new SqlParameter(parameterName, columnAttribute.SqlDbType) : new SqlParameter(parameterName, parameterValue);

            IDataParameter parameter = new SqlParameter(tempParameter.ParameterName, tempParameter.SqlDbType,
                columnAttribute.Size, tempParameter.Direction,
                        isNullable, 0, 0, tempParameter.SourceColumn, tempParameter.SourceVersion, parameterValue);

            return parameter;
        }

       
        public override IDataParameter CreateProcedureParameter(ParameterAttribute parameterAttribute, string parameterName, object parameterValue)
        {
            parameterValue=AdaptParameterValue(parameterValue);
            bool isNullable = true;
            SqlParameter tempParameter = (parameterValue is DBNull) ?
                new SqlParameter(parameterName, parameterAttribute.SqlDbType) : new SqlParameter(parameterName, parameterValue);

            IDataParameter parameter = new SqlParameter(tempParameter.ParameterName, tempParameter.SqlDbType,
                parameterAttribute.Size, parameterAttribute.Direction,
                        isNullable, 0, 0, tempParameter.SourceColumn, tempParameter.SourceVersion, parameterValue);
            return parameter;
        }

      

    }


}
